/**
 * @param {function} Options<
 * {
 *   title: '',
 *   path: '',
 *   imageUrl: '',
 * }>
 * @returns {Promise<void>}
 */

// #ifdef H5
import { setConfig } from "@/tools/wx"
// #endif

export default function (func) {
	function optionsFormat(func) {
		let options = func
		if (typeof func === "function") {
			options = func.call(this)
		}
		// #ifdef MP-JD
		options.path = options.path.replace(/^\//, "")
		// #endif

		return options
	}
	return {
		// #ifdef MP
		onShareAppMessage() {
			const options = optionsFormat.call(this, func)

			if (options.query) {
				if (typeof options.query !== "string") {
					options.query = uni.$u.queryParams(options.query)
				}
			}

			return {
				title: options.title || "分享",
				path: options.path || getCurrentPages().pop()?.route,
				...options,
			}
		},
		// #endif

		// #ifdef H5
		async onShow() {
			const options = optionsFormat.call(this, func)

			try {
				const wx = await setConfig()
				wx.updateTimelineShareData({
					...options,
					title: options.title, // 分享标题
					link: options.path, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
					imgUrl: options.imageUrl, // 分享图标
					success: options.success,
					fail: options.fail,
				})
			} catch (error) {
				options.fail(error)
			}
		},
		// #endif

		methods: {
			async showShare() {
				// #ifdef H5
				return Promise.resolve("H5端需要用户自己点击右上角进行分享")
				// #endif

				// #ifndef H5
				const options = optionsFormat.call(this, func)
				// #endif

				// #ifdef APP-PLUS
				return new Promise((success, fail) => {
					uni.share({
						...options,
						provider: options.provider || "weixin",
						scene: options.scene || "WXSceneSession", // WXSceneSession 聊天界面 | WXSenceTimeline 朋友圈 | WXSceneFavorite 微信收藏
						href: options.path || "",
						success,
						fail,
					})
				})
				// #endif

				// #ifdef MP
				return new Promise((success, fail) => {
					uni.showShareMenu({
						...options,
						success,
						fail,
					})
				})
				// #endif
			},
		},
	}
}
